package com.uva.dbcs.web.beans.gestionDeUsuarios;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.uva.dbcs.gestionDeUsuarios.dominio.Cliente;

import com.uva.dbcs.gestionDeUsuarios.despliegue.GestorDeUsuariosLocal;
import com.uva.dbcs.utilidades.dominio.TipoCarnet;
import com.uva.dbcs.web.beans.gestionDeUsuarios.utils.CarnetVista;

@ManagedBean
@ViewScoped
public class ClientesBean implements Serializable {

	private static final long serialVersionUID = 1L;

	// usados para la creacion
	
	private String nombreCliente;
	
	private String nifCliente;
	
	private String emailCliente;
	
	private String passwordCliente;
	
	private String codPostalCliente;
	
	private String direccionPostalCliente;
	
	private List<String> carnetsString;
	
	private Date fechaValido;
	
	private List<CarnetVista> carnetsIntroducidos;
	
	private String carnetSeleccionadoString;
	
	private boolean renderCarnetsIntroducidos;
	
	// usados para la tabla de clientes
	
	private List<Cliente> clientes;
	
	private List<Cliente> clientesFiltrados;
	
	
	@EJB
	GestorDeUsuariosLocal gestorDeUsuarios;

	@PostConstruct
	public void init() {

		// construir la lista de strings de carnets

		carnetsString = new ArrayList<String>();

		for (TipoCarnet c : TipoCarnet.values()) {
			carnetsString.add(c.name());
		}
		
		carnetsIntroducidos = new ArrayList<CarnetVista>();
		
		// construir todo lo necesario para la tabla de clientes
		
		clientes = gestorDeUsuarios.getClientes();
		

	}

	public void nuevoCliente() {
		
		// crear cliente
		
		gestorDeUsuarios.crearCliente(false, Integer.parseInt(getCodPostalCliente()),
				getDireccionPostalCliente(), getEmailCliente(),getNifCliente(),
				getNombreCliente(), getPasswordCliente());
		
		
		
		// add los carnets que se hayan creado
		
		if (carnetsIntroducidos.size()>0){
			
			// obtener el id del cliente para poder usarlo en el add de carnets
			
			 Cliente c =gestorDeUsuarios.getClienteByDni(getNifCliente());
			 
			 
			 for (CarnetVista carnetVista: carnetsIntroducidos){
				 
				 gestorDeUsuarios.addCarnetACliente(c.getIdCliente(),TipoCarnet.valueOf(carnetVista.getNombre())
						 , carnetVista.getFechaValido());
				 
			 }
			 
			
		}
		
		// actualizar los clientes para la tabla
		
		clientes = gestorDeUsuarios.getClientes();

		// mostrar mensaje de confirmacion
		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage("Cliente creado correctamente"));

	}

	public String getNombreCliente() {
		return nombreCliente;
	}

	public void setNombreCliente(String nombreCliente) {
		this.nombreCliente = nombreCliente;
	}

	public String getNifCliente() {
		return nifCliente;
	}

	public void setNifCliente(String nifCliente) {
		this.nifCliente = nifCliente;
	}

	public String getEmailCliente() {
		return emailCliente;
	}

	public void setEmailCliente(String emailCliente) {
		this.emailCliente = emailCliente;
	}

	public String getPasswordCliente() {
		return passwordCliente;
	}

	public void setPasswordCliente(String passwordCliente) {
		this.passwordCliente = passwordCliente;
	}

	public String getCodPostalCliente() {
		return codPostalCliente;
	}

	public void setCodPostalCliente(String codPostalCliente) {
		this.codPostalCliente = codPostalCliente;
	}

	public String getDireccionPostalCliente() {
		return direccionPostalCliente;
	}

	public void setDireccionPostalCliente(String direccionPostalCliente) {
		this.direccionPostalCliente = direccionPostalCliente;
	}


	public List<String> getCarnetsString() {
		return carnetsString;
	}

	public void setCarnetsString(List<String> carnetsString) {
		this.carnetsString = carnetsString;
	}

	public Date getFechaValido() {
		return fechaValido;
	}

	public void setFechaValido(Date fechaValido) {
		this.fechaValido = fechaValido;
	}

	public List<CarnetVista> getCarnetsIntroducidos() {
		return carnetsIntroducidos;
	}

	public void setCarnetsIntroducidos(List<CarnetVista> carnetsIntroducidos) {
		this.carnetsIntroducidos = carnetsIntroducidos;
	}


	public void addCarnet(){
		System.out.println("Add carnet");
		
		//Comprobacion de fecha válida
		
		//Crear un nueco carnet vista
		CarnetVista cv= new CarnetVista();
		cv.setFechaValido(getFechaValido());
		cv.setNombre(getCarnetSeleccionadoString());
		
		carnetsIntroducidos.add(cv);
		
		// mostramos los carnets que el usuario a introducido
		setRenderCarnetsIntroducidos(true);
		
		
		
	}

	public String getCarnetSeleccionadoString() {
		return carnetSeleccionadoString;
	}

	public void setCarnetSeleccionadoString(String carnetSeleccionadoString) {
		this.carnetSeleccionadoString = carnetSeleccionadoString;
	}

	public boolean isRenderCarnetsIntroducidos() {
		return renderCarnetsIntroducidos;
	}

	public void setRenderCarnetsIntroducidos(boolean renderCarnetsIntroducidos) {
		this.renderCarnetsIntroducidos = renderCarnetsIntroducidos;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public List<Cliente> getClientesFiltrados() {
		return clientesFiltrados;
	}

	public void setClientesFiltrados(List<Cliente> clientesFiltrados) {
		this.clientesFiltrados = clientesFiltrados;
	}

	
	


}
